[LeetCode] 560 - Subarray Sum Equals K

題意

找出陣列中子陣列和為 K 的次數。

解法

假設 sum(i) 為第一個元素至第 i 個元素的總和。

若 sum(j) + k = sum(i),則代表從 j+1 ~ i 的和也就是 sum(i) - sum(j) 為 k 。

程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var subarraySum = function(nums, k) {
let map = { 0 : 1 };
let sum = 0;
let count = 0;
nums.forEach((num) => {
sum += num;
if ( map[sum-k] ) {
count += map[sum-k];
}
map[sum] = map[sum] === undefined ? 1 : map[sum] + 1;
})
return count;
};